package com.springboot.file.util.easyexcel.provider;

import java.util.List;
import java.util.Map;

/**
 * 数据导出服务提供者接口
 * 各业务模块实现此接口以提供导出数据
 */
public interface ExportProvider<T> {

    /**
     * 获取导出总记录数
     *
     * @param params 导出条件参数
     * @return 导出数据总数
     */
    long getExportDataCount(Map<String, Object> params);

    /**
     * 获取分页导出数据
     *
     * @param params   导出条件参数
     * @param pageNum  当前页码
     * @param pageSize 每页大小
     * @return 本页导出数据
     */
    List<T> getExportData(Map<String, Object> params, int pageNum, int pageSize);

    /**
     * 获取实体类Class对象
     *
     * @return 导出数据对应实体类
     */
    Class<T> getEntityClass();

    /**
     * 获取Excel表单名称
     *
     * @return 表单名称，默认为Sheet1
     */
    default String getSheetName() {
        return "Sheet1";
    }

    /**
     * 存储导出参数，方便后续异步任务使用
     * 
     * @param params 导出参数
     */
    default void storeExportParams(Map<String, Object> params) {
        ExportParamsStore.storeParams(this.getClass().getName(), params);
    }

    /**
     * 获取存储的导出参数
     * 
     * @return 导出参数
     */
    default Map<String, Object> getExportParams() {
        return ExportParamsStore.getParams(this.getClass().getName());
    }

    /**
     * 清理存储的导出参数
     */
    default void clearExportParams() {
        ExportParamsStore.clearParams(this.getClass().getName());
    }
}
